﻿#define _CRT_SECURE_NO_WARNINGS 1

#include<vector>

//#include"RBTree.h"

//
//int main()
//{
//	const int N = 13000;
//	std::vector<int> v
//		/*= { 6791,20391,201,27729,7075,11224,1255,28704,20726,30182
//		,25580,10693,29993,5668,23536,14792,22073,21484
//		,17135,23042,21288,11401,4638,2981,25074,4436,15230,26236,12738,20766 }*/
//		;
//	v.reserve(N);
//	srand(time(0));
//
//	for (size_t i = 0; i < N; i++)
//	{
//		v.push_back(rand());
//		//cout << v.back() << endl;
//	}
//
//	RBTree<int> t;
//	for (auto e : v)
//	{
//		if (e == 30182)
//		{
//			int x = 0;
//		}
//
//		//cout << "Insert:" << e << endl;
//		t.Insert(e);
//		//cout << "Insert " << e << " is ->" << t.IsValidRBTRee() << endl;
//		//cout << "-----------------------" << endl;
//	}
//
//	cout << t.IsValidRBTRee() << endl;
//	//cout << t.Size() << endl;
//
//	for (auto e : v)
//	{
//		t.Find(e);
//	}
//
//	return 0;
//}

#include"RBTree_with_iterator.h"
#include"MyMap.h"
#include"MySet.h"
#include<string>
//int main()
//{
//	const int n = 13;
//	std::vector<int> v
//		/*= { 6791,20391,201,27729,7075,11224,1255,28704,20726,30182
//		,25580,10693,29993,5668,23536,14792,22073,21484
//		,17135,23042,21288,11401,4638,2981,25074,4436,15230,26236,12738,20766 }*/
//		;
//	v.reserve(n);
//	srand(time(0));
//
//	for (size_t i = 0; i < n; i++)
//	{
//		v.push_back(rand());
//		//cout << v.back() << endl;
//	}
//
//	//RBTree<int> t;
//	RoundBottle::set<int> setobject;
//	for (auto e : v)
//	{
//		/*if (e == 30182)
//		{
//			int x = 0;
//		}*/
//
//		//cout << "Insert:" << e << endl;
//		//t.Insert(e);
//		//cout << "Insert " << e << " is ->" << t.IsValidRBTRee() << endl;
//		//cout << "-----------------------" << endl;
//		setobject.insert(e);
//	}
//
//	for (auto e : setobject)
//	{
//		cout << e << "    ";
//	}
//	cout << endl;
//	cout << "-------------------------------------------------------" << endl;
//
//	auto it = setobject.begin();
//	while (it != setobject.end())
//	{
//		cout << *it << "    ";
//		++it;
//	}
//
//	return 0;
//}
using std::string;


void test_set()
{
	RoundBottle::set<int> s;
	s.insert(4);
	s.insert(1);
	s.insert(2);
	s.insert(3);
	s.insert(2);
	s.insert(0);
	s.insert(10);
	s.insert(5);

	RoundBottle::set<int>::iterator it = s.begin();
	while (it != s.end())
	{
		//*it += 1;

		cout << *it << " ";
		++it;
	}
	cout << endl;

	

	// key
	it = s.begin();
	cout << *(++it) << endl;
	cout << *(--it) << endl;
	//*it = 100;

	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
}

void test_map()
{
	RoundBottle::map<string, string> dict;
	dict.insert(make_pair("sort", "排序"));
	dict.insert(make_pair("sort", "排序"));
	dict.insert(make_pair("left", "左"));
	dict.insert(make_pair("right", "右"));

	RoundBottle::map<string, string>::iterator it = dict.begin();
	while (it != dict.end())
	{
		// key
		//it->first += 'x';
		it->second += 'y';

		cout << it->first << ":" << it->second << endl;
		++it;
	}
	cout << endl;

	string arr[] = { "what", "now","fearless", "current", "speak", "me", "now", "make", "account", "king", "ice", "that", "red" };
	RoundBottle::map<string, int> countMap;
	for (auto& e : arr)
	{
		countMap[e]++;
	}

	for (auto& kv : countMap)
	{
		cout << kv.first << ":" << kv.second << endl;
	}
	cout << endl;
}

int main()
{
	test_map();
	test_set();

	return 0;
}